import router from './router'
import store from './store'

import getPageTitle from '@/utils/get-page-title'
import { getToken } from '@/utils/auth'

import NProgress from 'nprogress' // 页面刷新进度条
import 'nprogress/nprogress.css'  // 页面刷新进度条风格
NProgress.configure({ showSpinner: false }) // 页面刷新进度条配置

// Vue 路由导航守卫 (每次页面跳转前需要执行的代码)
// to 与 from 是在 @/router/index 中自定义的每一个路由对象:
// { path: '/login', name: '/login', component: () => import('...'), meta: { title: '登录' }} 
router.beforeEach(async (to, from, next) => {  
    // Start progress bar =>
    NProgress.start()
    
    // Set page title => 
    // document 是全局属性
    document.title = getPageTitle(to.meta.title)
    
    // Extract token from cookie & Determine whether the user has logged in =>
    const hasToken = getToken()

    // 若本地 cookie 包含有 token =>
    if (hasToken) {
        // 若在已经登录的情况下要跳转到 /login
        if (to.path === '/login') {
            // 则直接跳转到首页
            next({ path: '/' })
            NProgress.done()
        // 若要跳转到其他
        } else {
            // 获取用户信息
            await store.dispatch('user/getUserInfo')
            next()
        }
    } else if (!to.meta.requireAuth) {
        // 不需要登录认证就放行
        next()
    } else {
        next('/login')
    }
})

router.afterEach(() => {
    // Finish progress bar
    NProgress.done()
})
